from itsdangerous import URLSafeTimedSerializer as Serializer
import base64
from django.conf import settings


# 复制的第十四个django项目的util.py，没改注释，但三个方法的作用没变，即分别是生成、校验、删除token。
class Token:
    def __init__(self,secret_key):
        self.secret_key=secret_key
        self.salt=base64.encodebytes(secret_key.encode('utf-8')) # 返回bytes对象

    def generate_activate_token(self,id): # 生成用于激活帐号的token，防止激活链接中明文存放新用户的id
        s=Serializer(self.secret_key)
        return s.dumps(id,self.salt) # URLSafeTimedSerializer类是和时间相关的，它的对象在dumps()时会自动用上当前时间

    def check_activate_token(self,token,expiration=3600): # 校验用于激活帐号的token。第三个参数是过期时间，单位秒。由于定义方法时设置了expiration的默认值，所以调用时传不传都行
        s=Serializer(self.secret_key)
        return s.loads(token,salt=self.salt,max_age=expiration)

    def del_validate_token(self,token): # token过期或校验失败时删除token
        s=Serializer(self.secret_key)
        print(s.loads(token,salt=self.salt))
        return s.loads(token,salt=self.salt)


token_confirm=Token(settings.SECRET_KEY) # 定义为全局变量